<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪数组</title>
</head>

<body>
    <script>
        // arguments    函数的所有参数   隐式参数
        function show(a, b) {
            console.log(a, b);
            console.log(arguments);
            //Arguments(2)[10,20,callee:f,Symbol(Symbol.iterator):f]
            //伪数组
            console.log(arguments.length);//2
            console.log(arguments[0], arguments[1]);// 10,20
            // 他没有数组内置方法,判断他是不是真数组,还是伪数组
            console.log(arguments instanceof Array);// false
            console.log(Array.isArray(arguments));// false

            console.log(arguments.callee);//指向函数本身
            console.log(arguments.callee == show); // true
        }
        show(10, 20);

        //可以按长度来做
        function show(a, b) {
            if (arguments.length == 0) {
                document.write('hello world');
            } else if (arguments.length == 1) {
                console.log(a * a);
            } else {
                console.log(a + b);
            }
        }
        show();
        show(10)
        show(10, 20)
        // 也可用arguments[0] == undefined;      无参    
        //      arguments[1] != undefined; 至少两个参数


        //伪数组转换成真正的数组
        //方法一：
        function demo() {
            var arr = [];
            for (var i = 0; i < arguments.length; i++) {
                //arr[arguments.length] = arguments[i]
                arr[i] = arguments[i];
            }
            console.log(arr);
        }
        demo(10, 20, 30)

        //方法二：
        function demo1() {
            var arr = Array.prototype.slice.call(arguments);
            console.log(arr);
        }
        demo1(10, 20, 30)

        //方法三  // 扩展运算符  es6 方法
        function demo2() {
            var arr = [...arguments]
            console.log(arr);
        }
        demo2(10, 20, 30)

        //方法四   内置方法
        function demo2() {
            var arr = Array.from(arguments);
            console.log(arr)
        }
        demo2(10,20,30)

    </script>
</body>

</html>